/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy.
 */
package cz.pecinovsky.english.pojj.adv_demo.gui._04_abstract._1b;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IGameG;

import cz.pecinovsky.english.pojj.adv_framework.gui_stage.IGUI_04;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuItem;



/*******************************************************************************
 * Instance třídy {@code MenuGame_1} představují nabídku obsahující
 * příkazy přímo ovládající hraní hry a jeho parametry.
 *
 * @author    Rudolf PECINOVSKÝ
 * @version   0.00.000
 */
@SuppressWarnings("serial")
class MenuGame extends JMenu
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    /** GUI používající tuto nabídku. */
    private final IGUI_04 gui;



//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří novou nabídku obsahující příkazy přímo ovládající hraní hry
     * a jeho parametry.
     *
     * @param gui GUI, pro které bude tato instance pracovat
     */
    MenuGame(IGUI_04 gui)
    {
        super("Hra");
        setMnemonic('H');
        this.gui = gui;

        addSubmenuNewGame();
        addItemRestartGame();
        addItemStopGame();
        addItemExitGUI();
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Přidá položku nabídky, která nabídne uživateli sesznam dostupných her
     * a spustí tu, kterou si uživatel vybere.
     */
    private void addSubmenuNewGame()
    {
        JMenu menu = new JMenu("Nová hra");
        setMnemonic('N');
        this.add(menu);
        menu.setEnabled(false);
    }


    /***************************************************************************
     * Přidá položku nabídky, která ukončí a znovu spustí právě hranou hru.
     */
    private void addItemRestartGame()
    {
        JMenuItem item = new JMenuItem("Restart hry", 'R');
        this.add(item);

        item.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                IGameG game = gui.getGame();
                //GUI ošetřuje i případnou potřebu zastavení běžící hry
                gui.startGame(game);
            }
        });
    }


    /***************************************************************************
     * Přidá položku nabídky, která ukončí právě hranou hru.
     */
    private void addItemStopGame()
    {
        JMenuItem item = new JMenuItem("Konec hry", 'Y');
        this.add(item);

        item.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                IGameG game = gui.getGame();
                game.stop();
            }
        });
    }


    /***************************************************************************
     * Nastaví nebo potlačí zobrazování plánku hry.
     */
    private void addItemShowMap()
    {
        final JCheckBoxMenuItem showMap = new JCheckBoxMenuItem(
                                              "Zobrazovat plánek hry", true);
        showMap.setMnemonic('p');
//        gui.setZobrazovatPlánek(true);
        this.add(showMap);

        showMap.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e)
            {
//                gui.setZobrazovatPlánek(showMap.getState());
            }
        });
    }


    /***************************************************************************
     * Přidá položku nabídky která ukončí běh dané aplikace.
     */
    private void addItemExitGUI()
    {
       JMenuItem item = new JMenuItem("Konec", 'K');
        this.add(item);

        item.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                IGameG game = gui.getGame();
                game.stop();
                System.exit(0);
            }
        });
    }



//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        MenuGame_1 inst = new MenuGame_1();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
